#define _CRT_SECURE_NO_WARNINGS 1

//#include<stdio.h>
// int main(int argc, char* argv[])
//    {
//        struct tagTest1
//        {
//            short a;
//            char d;
//            long b;
//            long c;
//        };
//        struct tagTest2
//        {
//            long b;
//            short c;
//            char d;
//            long a;
//        };
//        struct tagTest3
//        {
//            short c;
//            long b;
//            char d;
//            long a;
//        };
//        struct tagTest1 stT1;
//        struct tagTest2 stT2;
//        struct tagTest3 stT3;
//
//        printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));
//        return 0;
//    }


#include<stdio.h>
#include<string.h>
void My_memcpy(void* dst,const void* pr,size_t sz)
{
	void* det = dst;
	while (sz)
	{
		*((char*)dst) = *((char*)pr);
		dst=(char*)dst+1;
		pr=(char*)pr+1;
		sz--;
	}
	return det;
}

void* My_memmove(void* dst,void* pr,size_t sz)
{
	void* det = dst;
	if (dst >= pr)
	{
		while (sz)
		{
			*((char*)dst) = *((char*)pr);
			dst = (char*)dst + 1;
			pr = (char*)pr + 1;
			sz--;
		}
	}
	else
	{
		while (sz--)
		{

			*((char*)dst + sz) = *((char*)pr + sz);

		}
	}
	return det;

}


int main()
{
	int a = 12;
	int b = 0;
	printf("%d\n",b);
	//memcpy(&b, &a, 4);
	//My_memcpy(&b, &a, 4);
	My_memmove(&b, &a, 4);
	printf("%d\n",b);
	return 0;
}